package Risk.IHM;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;

/**
 *
 * @author nicoleta
 */
public class FenetreOptions extends JFrame implements ActionListener {
    private static FenetreOptions	instance         = null;
    private static final long		serialVersionUID = 1L;
    private ImageCarte			imgCarte;

    // composantes fenetre
    private JCheckBox		jcbAfficheNomPays, jcbAffichePossesion;
    private JRadioButton	jrbSurlignageCouleur;
    private JRadioButton	jrbSurlignageGris;

    /**
     * constructeur
     */
    private FenetreOptions() {
	super("Options ...");

	// position de la fenetre
	Dimension	ecran = Toolkit.getDefaultToolkit().getScreenSize();

	this.setLocation((ecran.height) / 3, (ecran.width) / 3);
	this.setLayout(new BorderLayout());

	// en haut de la frame
	JLabel	jlChoixCouleur = new JLabel("Choissisez une couleur de surlignage de la carte");

	// panel du milieur qui contient les radioBoutons pour la mise en surbrilance des pays sur la carte
	JPanel	pRadBout = new JPanel(new GridLayout(2, 1));

	pRadBout.setBorder(BorderFactory.createEtchedBorder(Color.BLACK, Color.GRAY));

	// les radio buttons
	jrbSurlignageGris = new JRadioButton("Surligner en gris");
	jrbSurlignageGris.addActionListener(this);
	jrbSurlignageGris.setSelected(false);
	jrbSurlignageCouleur = new JRadioButton("Surligner en couleur");
	jrbSurlignageCouleur.addActionListener(this);

	// ajout des boutons au buttonGroup
	ButtonGroup	bg = new ButtonGroup();

	bg.add(jrbSurlignageCouleur);
	bg.add(jrbSurlignageGris);

	// ajout des boutons au panel milieu
	pRadBout.add(jrbSurlignageCouleur);
	pRadBout.add(jrbSurlignageGris);

	JPanel	jpBas = new JPanel(new GridLayout(2, 1));

	jcbAfficheNomPays = new JCheckBox("Afficher les noms des pays");
	jcbAfficheNomPays.setMnemonic(KeyEvent.VK_A);
	jcbAfficheNomPays.setDisplayedMnemonicIndex(0);
	jcbAfficheNomPays.addActionListener(this);
	jcbAffichePossesion = new JCheckBox("Afficher les possesions des joueurs");
	jcbAffichePossesion.setMnemonic(KeyEvent.VK_P);
	jcbAffichePossesion.setDisplayedMnemonicIndex(13);
	jcbAffichePossesion.addActionListener(this);
	jpBas.add(jcbAfficheNomPays);
	jpBas.add(jcbAffichePossesion);

	// remise a zeo des options
	// razOptions();
	// ajout des composantes a la frame
	this.add(jlChoixCouleur, BorderLayout.NORTH);
	this.add(pRadBout, BorderLayout.CENTER);
	this.add(jpBas, BorderLayout.SOUTH);
	this.addWindowListener(new WindowAdapter() {
	    @Override
	    public void windowClosing(WindowEvent e) {
		setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
	    }
	});
	this.pack();
	this.setVisible(true);
    }

    /**
     *
     * @param e
     */
    public void actionPerformed(ActionEvent e) {
	Object	o = e.getSource();

	if (o.equals(jcbAfficheNomPays)) {
	    if (imgCarte != null) {

		// affiche les noms des pays
		imgCarte.setAfficherNomPays(jcbAfficheNomPays.isSelected());
		imgCarte.repaint();
	    }
	}

	if (o.equals(jcbAffichePossesion)) {
	    if (imgCarte != null) {

		// dessiner les possesions de chaque joueur
		imgCarte.setAfficherPossessions(jcbAffichePossesion.isSelected());
		imgCarte.repaint();
	    }
	}

	if (o.equals(jrbSurlignageCouleur)) {
	    if (imgCarte != null) {

		// surligne en couleur les pays sur la carte
		imgCarte.setSurligner_couleur(true);
		imgCarte.repaint();
	    }
	}

	if (o.equals(jrbSurlignageGris)) {
	    if (imgCarte != null) {

		// surligner en gris les pays sur la carte
		imgCarte.setSurligner_couleur(false);
		imgCarte.repaint();
	    }
	}
    }

    /**
     *
     */
    public void razOptions() {
	jrbSurlignageCouleur.setSelected(false);
	jrbSurlignageGris.setSelected(false);
	jcbAfficheNomPays.setSelected(false);
	jcbAffichePossesion.setSelected(false);
    }

    public static FenetreOptions getInstance(ImageCarte imgCarte) {
	if (instance == null) {
	    instance = new FenetreOptions();
	}

	instance.setVisible(true);
	instance.setImgCarte(imgCarte);

	return instance;
    }

    /**
     *
     * @return
     */
    public boolean isCentreToDisplay() {
	return jcbAfficheNomPays.isSelected();
    }

    public void setImgCarte(ImageCarte imgCarte) {
	this.imgCarte = imgCarte;
	jcbAffichePossesion.setSelected(imgCarte.isAfficherPossessions());
	jrbSurlignageCouleur.setSelected(imgCarte.isSurligner_couleur());
	jcbAfficheNomPays.setSelected(imgCarte.isAfficherNomPays());
    }
}
